/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Estruturas;

import Interface.TelaImagem;
import com.sun.media.jai.widget.DisplayJAI;
import java.awt.Point;
import java.awt.Toolkit;
import java.util.LinkedList;
import javax.media.jai.JAI;
import javax.media.jai.PlanarImage;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

/**
 *
 * @author Linton
 */
public class HistoricoImagem {

    private LinkedList<PlanarImage> historicoImagem;
    String enderecoImagem;
    int posicaoAtual = 0;
    public TelaImagem telaImagemOriginal = new TelaImagem();

    public HistoricoImagem() {
        historicoImagem = new LinkedList<PlanarImage>();
        posicaoAtual = -1;

    }

    public void novaImagem(String endereco) {
        historicoImagem = new LinkedList<PlanarImage>();
        enderecoImagem = endereco;
        posicaoAtual = -1;
        atualizarHistorico(abrirImagem(endereco));
        redimensionarTelas();

    }

    private PlanarImage abrirImagem(String endereco) {
        PlanarImage imagem = null;
        try {
            imagem = JAI.create("fileload", endereco);
        } catch (Exception ex) {
        }
        return imagem;
    }

    public int size() {
        return historicoImagem.size();
    }

    public void removeLast() {
        historicoImagem.removeLast();
    }

    public PlanarImage getImageAtual() {
        return historicoImagem.get(posicaoAtual);//getLast();
    }

    public String getFirstEndereco() {
        return enderecoImagem;
    }

    public void atualizarHistorico(PlanarImage imagem) {
        if (posicaoAtual >= 0) {
            for (int i = historicoImagem.size() - 1; i > posicaoAtual; i--) {
                historicoImagem.remove(i);
            }
        }

        historicoImagem.add(imagem);
        posicaoAtual++;
        mostrarImagem();
    }

    private void redimensionarTelas() {
        PlanarImage image = historicoImagem.get(posicaoAtual);
        int height = image.getHeight();
        int whidth = image.getWidth();
        int diferença = 80;

        telaImagemOriginal.setTitle("Imagem");
        telaImagemOriginal.setBounds(10, 10, whidth + diferença, height + diferença);

        double width = Toolkit.getDefaultToolkit().getScreenSize().getWidth() / 2;
        height = (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight() / 2);
        int widthFinal = (int) (width - 300);
        int heigthFinal = (int) (122);
        telaImagemOriginal.setLocation(widthFinal, heigthFinal);
    }

    private void mostrarImagem() {
        DisplayJAI display;
        JScrollPane imagePane = new JScrollPane();

        imagePane = telaImagemOriginal.getPane();
        telaImagemOriginal.setVisible(true);

        PlanarImage imagem = historicoImagem.get(posicaoAtual);
        display = new DisplayJAI(imagem);
        JPanel panel = new JPanel();
        panel.setSize(imagem.getWidth(), imagem.getHeight());
        panel.add(display);

        int x = (imagePane.getWidth() - panel.getWidth()) / 2;
        int y = (imagePane.getHeight() - panel.getHeight()) / 2;

        panel.setLocation(x, y);
        imagePane.setViewportView(panel);
        imagePane.getViewport().setViewPosition(new Point(0, 0));
        imagePane.repaint();
        imagePane.updateUI();
    }

    public void voltar() {
        if (posicaoAtual > 0) {
            posicaoAtual--;
            mostrarImagem();
        }
    }

    public void refazer() {
        if (posicaoAtual < historicoImagem.size() - 1) {
            posicaoAtual++;
            mostrarImagem();
        }
    }

    public PlanarImage getFirst() {
        return this.historicoImagem.getFirst();
    }
}
